package halma;
//������ 
//���������ͬ 
//�ж�ʤ��
public class ChessBoard {
	
	//����
	private ChessBoardUnit[][] chessBoardUnits = new ChessBoardUnit[19][19];
	//�������
	private int numberOfPlayers;
	public ChessBoardUnit[][] getChessBoardUnits() {
		return chessBoardUnits;
	}

	public void setChessBoardUnits(ChessBoardUnit[][] chessBoardUnits) {
		this.chessBoardUnits = chessBoardUnits;
	}

	// �涨����Ч�����̸��ӵķ�Χ
	private int[][] unitsRange = { 
			{ 4, 4 }, // X����Ϊ1��Y��������5��������5
			{ 4, 5 }, // X����Ϊ2��Y��������5��������6
			{ 4, 6 }, // X����Ϊ3��Y��������5��������7
			{ 4, 7 }, // X����Ϊ4��Y��������5��������8
			{ 0, 12 }, // X����Ϊ5��Y��������1��������13
			{ 1, 12 }, // 6
			{ 2, 12 }, // 7
			{ 3, 12 }, // 8
			{ 4, 12 }, // 9
			{ 4, 13 }, // 10
			{ 4, 14 }, // 11
			{ 4, 15 }, // 12
			{ 4, 16 }, // 13
			{ 9, 12 }, // 14
			{ 10, 12 }, // 15
			{ 11, 12 }, // 16
			{ 12, 12 }, // 17
	};
	// ����base�ķ�Χ
	private int[][] notBaseRange = { 
			{ 0, 0 }, // X����Ϊ1��
			{ 0, 0 }, // X����Ϊ2��
			{ 0, 0 }, // X����Ϊ3��
			{ 0, 0 }, // X����Ϊ4��
			{ 4, 8 }, // X����Ϊ5��Y��������1��������13
			{ 4, 9 }, // 6
			{ 4, 10 }, // 7
			{ 4, 11 }, // 8
			{ 4, 12 }, // 9
			{ 5, 12 }, // 10
			{ 6, 12 }, // 11
			{ 7, 12 }, // 12
			{ 8, 12 }, // 13
			{ 0, 0 }, // 14
			{ 0, 0 }, // 15
			{ 0, 0 }, // 16
			{ 0, 0 }, // 17
	};

	// �ж��Ƿ�Ϊ��Ч�����̸���
	public boolean isChessBoardUnit(int x, int y) {
		int yMin = unitsRange[x][0];
		int yMax = unitsRange[x][1];
		if (y < yMin || y > yMax)
			return false;
		else
			return true;
	}

	// �ж��Ƿ�Ϊbase
	public Integer getType(int x, int y,int numberOfPlayers) {
		int yMin = notBaseRange[x][0];
		int yMax = notBaseRange[x][1];
		if (x < 4&&(numberOfPlayers==4||numberOfPlayers==6))
			return Director.leftDown;
		else if (x >= 4 && x <= 7) {
			if (y > yMax&&(numberOfPlayers==3||numberOfPlayers==4||numberOfPlayers==6))
				return Director.leftUp;
			else if (y < yMin&&(numberOfPlayers==2||numberOfPlayers==3||numberOfPlayers==6))
				return Director.down;
		} else if (x >= 9 && x <= 12) {
			if (y > yMax&&(numberOfPlayers==2||numberOfPlayers==6))
				return Director.up;
			else if (y < yMin&&(numberOfPlayers==4||numberOfPlayers==6))
				return Director.rightDown;
		} else if (x >= 13&&(numberOfPlayers==3||numberOfPlayers==4||numberOfPlayers==6))
			return Director.rightUp;
		return Director.none;
	}

	// ��ʼ�����̵ĺ���,����Ϊ �������
	public ChessBoard(int numberOfPlayers) {
		int[] number={0,0,0,0,0,0,0,0,0};
		int type;
		for (int x = 0; x < 17; x++)
			for (int y = 0; y < 17; y++) {
				if (isChessBoardUnit(x, y)) {
					chessBoardUnits[x][y] = new ChessBoardUnit();
					chessBoardUnits[x][y].setX(x);
					chessBoardUnits[x][y].setY(y);
					chessBoardUnits[x][y].setType(getType(x, y,numberOfPlayers));
					type=getType(x, y,numberOfPlayers);
					if(type!=0){
						chessBoardUnits[x][y].setBall(new Ball(number[type],type));
						number[type]++;
					}
				}
				else
					chessBoardUnits[x][y]=null;
			}
		this.numberOfPlayers=numberOfPlayers;
	}


}
